home *** CD-ROM | disk | FTP | other *** search
/ Adobe Graphics & Publishing SDK 1996 December / Adobe Graphics & Publishing SDK 1996 December.iso / pc / pm65sdk / sourcecode / includes / iadobevector.h < prev    next >
C/C++ Source or Header  |  1996-11-08  |  12KB  |  311 lines

  1. // ivector.h
  2. // See the IAdobeVector document for detailed information on this interface.
  3.  
  4. #ifndef __IVECTOR_H
  5. #define __IVECTOR_H
  6.  
  7. // Define all the stuff we need from the OLE headers used by ivector.h so the OLE
  8. // headers are not required on the Macintosh.  This is only supported on the 
  9. // Macintosh when using the Metrowerks compiler.
  10.  
  11. #if !defined(_OLE2_H_) && __MWERKS__ && defined (__cplusplus)
  12.  
  13.     typedef struct
  14.     {
  15.         unsigned long Data1;
  16.         unsigned short Data2;
  17.         unsigned short Data3;
  18.         unsigned char Data4[8];
  19.     } GUID;
  20.  
  21.     // Define DEFINE_GUID_DATA variable in one file to allocate storage for the GUID.
  22.     #ifdef DEFINE_GUID_DATA
  23.         #define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
  24.             extern GUID name = { l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8 }
  25.     #else
  26.         #define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
  27.             extern GUID name
  28.     #endif
  29.  
  30.     #define STDMETHOD_(type, method) virtual type method
  31.  
  32.     typedef void *HRESULT;
  33.     
  34.     #define REFIID GUID &
  35.  
  36.     typedef struct tagRECTL
  37.     {
  38.         long    left;
  39.         long    top;
  40.         long    right;
  41.         long    bottom;
  42.     } RECTL;
  43.  
  44.     // On the Macintosh 68k Platform, the OLE calling convention requires pointers in DO 
  45.     // since OLE is based on the MPW calling convention. 
  46.     // When using the MetroWerks Codewarrior compiler, use its pragma to set this option.
  47.     #ifndef __powerc
  48.         #pragma pointers_in_D0
  49.     #endif
  50.  
  51.     // Define IUnknown so the vtables match OLE's calling convension (MPW calling convension on the Mac).
  52.     // SingleObject is built into Metrowerk's Codewarrior compiler.
  53.     class IUnknown : public SingleObject {
  54.     public:
  55.         STDMETHOD_(HRESULT, QueryInterface)(REFIID riid, void **ppvObj) = 0;
  56.         STDMETHOD_(unsigned long, AddRef)() = 0;
  57.         STDMETHOD_(unsigned long, Release)() = 0;
  58.     };
  59.  
  60. #endif
  61.  
  62.  
  63. // RGB color definition used by IAdobeVector::RGBColor
  64. typedef struct {
  65.     unsigned short r;
  66.     unsigned short g;
  67.     unsigned short b;
  68. } AVRGB;
  69.  
  70. // CMYK color definition used by IAdobeVector::CMYKColor
  71. typedef struct {
  72.     unsigned short c;
  73.     unsigned short m;
  74.     unsigned short y;
  75.     unsigned short k;
  76. } AVCMYK;
  77.  
  78. // Hifi color definition used by IAdobeVector::HifiColor
  79. typedef struct {
  80.     unsigned long inkitem[8];    // Associated inks.
  81.     unsigned short inklevel[8];    // Dot area coverage of the ink for this color (0-65535).
  82.     unsigned short count;        // Number of elements in inkitem and inklevel.
  83.  
  84.     unsigned short c;
  85.     unsigned short m;
  86.     unsigned short y;
  87.     unsigned short k;
  88.     
  89.     unsigned short r;
  90.     unsigned short g;
  91.     unsigned short b;
  92. } AVHIFI;
  93.  
  94. // File types used by IAdobeVector::FileNeeded.
  95. typedef enum {
  96.     AV_TYPE_EPS,        // 0
  97.     AV_TYPE_OPI_1,        // 1
  98.     AV_TYPE_DCS,        // 2
  99.     AV_TYPE_OTHER,        // 3
  100.     AV_TYPE_OPI_2        // 4
  101. } AVFileNeededType;
  102.  
  103. // Type of PostScript to generate.  Used by AV_STATE_INFO.
  104. typedef enum {
  105.     AV_TYPE_COMPOSITE,    // 0, Generate composite data.
  106.     AV_TYPE_SEPARATION,    // 1, Generate separation data.
  107.     AV_TYPE_INRIPSEP,    // 2, Generate in-rip separation data.
  108.     AV_TYPE_ALL            // 3, Generate all data.
  109. } AVStateType;
  110.  
  111. // Type of PostScript to generate for bitmap data.  Used by AV_STATE_INFO.
  112. typedef enum {
  113.     AV_BITMAP_HIGHRES,    // 0,  Generate high-res bitmap data.
  114.     AV_BITMAP_LOWRES,    // 1,  Generate low-res bitmap data.
  115.     AV_BITMAP_NONE        // 2,  Do not generate any bitmap data.
  116. } AVStateBitmapType;
  117.  
  118. // This defines the current state. It is used by IAdobeVector::DownloadPostScript and it
  119. // determines what PostScript gets generated.
  120. typedef struct {
  121.     AVStateType type;                // Type of PostScript to generate.
  122.     AVStateBitmapType bitmaptype;    // Type of bitmap data to generate.
  123.     char *platecolor;                // Pointer to a color name.  0 when type does not equal AV_TYPE_SEPARATION.
  124.     
  125. //    unsigned long ink;                // Ink to use when generating bitmap data.
  126.  
  127. //    BOOL binaryimagedata;            // When TRUE, generate binary image date, otherwise generate ASCII image data.
  128. //    BOOL pageindependence;            // When TRUE, generate page independent data.
  129. //    BOOL extraimagebleed;
  130. //    BOOL grayscale;                    // When TRUE, generate grayscale information for color image data, otherwise
  131.                                     // print colors as black.
  132. //    BOOL mirror;                    // When TRUE, generate mirror image.
  133. //    BOOL negative;                    // When TRUE, generate image data in negative.
  134. //    BOOL preserveepscolors;            
  135. } AV_STATE_INFO;
  136.  
  137.  
  138. // Return codes from IAdobeVector methods. 
  139. typedef enum {
  140.     AV_SUCCESS,             // 0
  141.     AV_INVALID_ITEM_NUMBER,    // 1
  142.     AV_BUFFER_TOO_SMALL,    // 2
  143.     AV_INVALID_PARAMETER,    // 3
  144.     AV_DRAW_STOPPED_EARLY,    // 4
  145.     AV_OUT_OF_MEMORY,        // 5
  146.     AV_SYSTEM_ERROR,        // 6
  147.     AV_NOT_SUPPORTED,        // 7
  148.     AV_OPEN_ERROR,            // 8
  149.     AV_READ_ERROR,            // 9
  150.     AV_FILE_NOT_FOUND,        // 10
  151.     AV_WRITE_ERROR            // 11
  152. } AVRC;  // Adobe Vector Return Code
  153.  
  154. // This is the definition of the callback routine used by IAdobeVector::DownloadPostScript.
  155. // All the PostScript generated gets sent to this routine.
  156. // The pData parameter points to a buffer containing the PostScript.
  157. // The length parameter is the length of the data in the buffer.
  158. // The pExtra parameter is IAdobeVector::DownloadPostScript's extra parameter.
  159. typedef AVRC AV_PROCESS_DATA(char *pData, unsigned long length, void *pExtra);
  160.  
  161.  
  162. // This is the device used by the IAdobeVector::Draw method.
  163. #ifndef WIN32
  164.     typedef GrafPtr AV_DEVICE;
  165. #else
  166.     typedef HDC AV_DEVICE;
  167. #endif
  168.  
  169.  
  170. #ifdef __cplusplus
  171.  
  172.     // On the Macintosh 68k Platform, the OLE calling convention requires pointers in DO 
  173.     // since OLE is based on the MPW calling convention. 
  174.     // When using the MetroWerks Codewarrior compiler, use its pragma to set this option.
  175.     #if !defined(__powerc) && defined(__MWERKS__)
  176.         #pragma pointers_in_D0
  177.     #endif
  178.  
  179.     // {9C73C430-6C8E-11cf-8F20-0020AFE7735C}
  180.     DEFINE_GUID(IID_IAdobeVector, 0x9c73c430, 0x6c8e, 0x11cf, 0x8f, 0x20, 0x0, 0x20, 0xaf, 0xe7, 0x73, 0x5c);
  181.  
  182.     class IAdobeVector : public IUnknown {
  183.     public:
  184.         STDMETHOD_(HRESULT, QueryInterface)(REFIID riid, void **ppvObj) = 0;
  185.         STDMETHOD_(unsigned long, AddRef)() = 0;
  186.         STDMETHOD_(unsigned long, Release)() = 0;
  187.     
  188.         STDMETHOD_(AVRC, Draw)(AV_DEVICE device, RECTL *lprcBounds, unsigned long highres, int (* pfnContinue)(unsigned long), unsigned long dwContinue) = 0;
  189.         STDMETHOD_(AVRC, GetBoundingBox)(unsigned long *llx, unsigned long *lly, unsigned long *urx, unsigned long *ury) = 0;
  190.  
  191.         STDMETHOD_(AVRC, FontNeeded)(unsigned long item, char *name, unsigned short size) = 0;
  192.         STDMETHOD_(AVRC, FontSupplied)(unsigned long item, char *name, unsigned short size) = 0;
  193.  
  194.         STDMETHOD_(AVRC, HifiColor)(unsigned long item, char *name, unsigned short size, AVHIFI *pHifi) = 0; 
  195.         STDMETHOD_(AVRC, Ink)(unsigned long item, char *name, unsigned short size, unsigned short *pNeutralDensity) = 0;
  196.         STDMETHOD_(AVRC, ProcessColorsUsed)(int *pCyan, int *pMagenta, int *pYellow, int *pBlack) = 0;
  197.         STDMETHOD_(AVRC, RGBColor)(unsigned long item, char *name, unsigned short size, AVRGB *pRgb) = 0;
  198.         STDMETHOD_(AVRC, CMYKColor)(unsigned long item, char *name, unsigned short size, AVCMYK *pCmyk, int *pSpot) = 0;
  199.  
  200.         STDMETHOD_(AVRC, FileNeeded)(unsigned long item, char *filename, unsigned short size, AVFileNeededType *type) = 0;
  201.         STDMETHOD_(AVRC, ChangeFilename)(unsigned long item, char *filename) = 0;
  202.  
  203.         STDMETHOD_(AVRC, DownloadPostScript)(AV_STATE_INFO *pState, AV_PROCESS_DATA *pProcessData, void *extra) = 0;
  204.     };
  205.  
  206.     #if !defined(__powerc) && defined(__MWERKS__)
  207.         #pragma pointers_in_A0
  208.     #endif
  209.  
  210. #endif
  211.  
  212. // PageMaker specific stuff
  213.  
  214. #ifdef _PAGEMAKE
  215.     #ifdef __cplusplus
  216.         /*
  217.         Create and return an IAdobeVector interface pointer. Create it from the data
  218.         associated with the S_PSCRIPT segment (the lpSeg parameter).  The pFCRec parameter
  219.         specifies the publication where the segment exists, pass 0 to use the 
  220.         current publication. The IAdobeVector interface pointer for the segment
  221.         is returned in the pAV parameter.
  222.  
  223.         The pPreviewTID and pPreviewType parameters are optionally returned with the preview data 
  224.         and its type.  The possible types are S_METAFILE, S_MACPICT, and S_BITMAP. When the associated
  225.         EPS file does not contain a preview, this routine will create one.  pPreviewTID and 
  226.         pPreviewType are optional, pass 0 when they are not needed.
  227.  
  228.         When done with the IAdobeVector interface, the caller must call the IAdobeVector 
  229.         Release method to free memory used.
  230.         */
  231.         RC CreateAdobeVector(FCREC *pFCRec, LPSEGMENT lpSeg, WORD *fileKind, IAdobeVector **pAV);
  232.         RC CreateAdobeVector(FCREC *pFCRec, TID tid, FILESPEC *pFileSpec, TID *pPreview, BYTE *pPreviewType,WORD *fileKind, IAdobeVector **pAV);
  233.         
  234.         /*
  235.         Get the filespec associated with the given segment.  If the file is stored in a
  236.         publication table, a special table filespec is returned, otherwise
  237.         the filespec to the external file is returned.
  238.         */
  239.         RC GetEpsFileSpec(FCREC *pFCRec, LPSEGMENT lpSeg, FILESPEC *pFileSpec, FILESPEC *pExternalSpec);
  240.  
  241.         /*
  242.         Create a filespec from a name string.  The name format can be in either platform's style.  
  243.         The name can be a full path name or just the name part.  When only the name is specified,
  244.         or the path is in the wrong format for this platform, the DefaultFileSpec's path is used with 
  245.         the name to create the new filespec.  pFound is returned true when the file exists.
  246.         pFound is optional, pass 0 when this information is not needed.
  247.         */
  248.         RC CreateFileSpecFromName(FILESPEC *DefaultFileSpec, char *name, FILESPEC *NewFileSpec, BOOL *pFound);
  249.     #endif
  250.  
  251.     #ifdef __cplusplus
  252.         extern "C" {
  253.     #endif
  254.         /*
  255.             Return file kind of the file in this segment
  256.         */
  257.         WORD FindFileKindofEPSSeg(FCREC *pFCRec, LPSEGMENT lpSeg);
  258.  
  259.         /*
  260.         Convert 6.0 Eps private data to 5.0 private data.  The tid parameter is a table of private
  261.         data in 6.0 format.  A new table is created and returned in the newTID parameter.
  262.         */
  263.         RC ConvertEps6To5(PFCB pFCB, TID tid, PFCB pNewFCB, TID *newTID);
  264.  
  265.         /*
  266.         Convert 5.0 Eps private data to 6.0 private data.  The tid parameter is a table of private
  267.         data in 5.0 format.  A new table is created and returned in the newTID parameter.
  268.         */
  269.         RC ConvertEps5To6(PFCB pFCB, TID tid, PFCB pNewFCB, TID *newTID);
  270.  
  271.     #if defined (DEBUG) || defined(_DEBUG)
  272.  
  273.         /*
  274.         Call this to test this implementation of IAdobeVector.
  275.         */
  276.         RC TestAdobeVector();
  277.  
  278.         /*
  279.         This routine appends the given eps private data (pFCRec and tid) to the end of the given 
  280.         test file (testfile) in a format that the CreateTestTable routine can read.  The format 
  281.         parameter is 5 or 6    depending on the private data format.  The filespec parameter is the filespec of
  282.         the associated EPS file.
  283.         */
  284.         RC AppendToTestFile(FCREC *pFCRec, TID tid, WORD format, FILESPEC *filespec);
  285.         RC AppendToFile(char *testfile, FCREC *pFCRec, TID tid, WORD format, FILESPEC *filespec);
  286.  
  287.         /*
  288.         This routine creates a table used with CreateAdobeVector.  It creates the table by reading the
  289.         data from the test file provided.  The test file can have several images in it and the item parameter
  290.         specifies which one to use (0 first, 1 second, etc).  The tid, format and filespec parameters
  291.         are filled in.
  292.         */
  293.         RC CreateTestTable(char *testfile, int item, FCREC *pFCRec, TID *pTid, WORD *pFormat, FILESPEC *filespec);
  294.  
  295.         /*
  296.         Compare the given filename path part with the given pfs path part.
  297.         Compare the given filename name part with the comparestring.
  298.         Return non-zero when they don't match.  The pfs and comparestring parameters are optional, pass 0
  299.         to skip the compare.
  300.         */
  301.         unsigned long CompareFilenameParts(FILESPEC *pfs, char *filename, char *comparestring);
  302.  
  303.         RC CheckVectorHeader(BOOL quite);
  304.     #endif
  305.  
  306.     #ifdef __cplusplus
  307.         }
  308.     #endif
  309. #endif
  310. #endif
  311.